#ifndef _CONFIG_BASE_H_
#define _CONFIG_BASE_H_
#include <string>
#include <string.h>
#include <cstring>
#include <stdio.h>
#include <map>
#include <list>
#include <string>
#include <vector>

using namespace std;

//保存每个配置项的键、值对
typedef pair < string, pair < string, string > > Pair_Config_Value;
typedef list < Pair_Config_Value > List_Config_Item;

//读取配置文件类
class Config_Base
{
public:
    Config_Base(void);
    ~Config_Base(void);

    static Config_Base* instance()
    {
        static Config_Base tmpBase;
        return &tmpBase;
    }

    //传入配置文件名称路径，加载配置项到内存
    int Load(const char *pPath);
    
    int Load(const char *pPath,List_Config_Item& listItem);
    
    //重新加载配置项
    int Reload(void);

    //读取指定配置子项值，成功返回0和配置的字符串值，否则返回-1
    int Read(const string &strItem, const string &strLvalue, string &strValue);

    //获取某个配置项内容（一般是主配置项内容）
    int Get(string &strItem, string &strLvalue, string &strValue);

private:
    Config_Base(const Config_Base &);
    Config_Base &operator=(const Config_Base &);

private:
    char *m_pPath;
    List_Config_Item m_oldlstConfig; // 刷新前配置项，两份配置交叉使用
    List_Config_Item m_newlstConfig; // 刷新后配置项
    int m_iFlag; // 0表示使用刷新前配置，1表示使用刷新后配置
};

#endif
